package com.shop.cereshop.app.job;

import com.shop.cereshop.commons.domain.user.FriendUserInfoVo;
import com.shop.cereshop.commons.enums.RedisEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.data.geo.Point;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

@Component
@Order(11)
@Slf4j
public class NearByUserJob {

    @Resource
    private RedisTemplate<String, String> redisTemplate;


    /**
     * 定时清理过期用户位置
     * 例如：每10分钟执行一次，清理15分钟未更新的用户
     */
//    @Scheduled(cron = "0 */20 * * * ?") // 每10分钟执行一次
    public void cleanupExpiredLocations() {
        long expireTimeMillis = System.currentTimeMillis() - (15 * 60 * 1000); // 15分钟前的时间戳
        // 1. 找出USER_LOCATION_TS_KEY中所有分数(时间戳)小于expireTimeMillis的成员（即过期的用户ID）
        Set<String> expiredUserIds = redisTemplate.opsForZSet().rangeByScore(RedisEnum.USER_LOCATION_TS_KEY.getKey(), 0, expireTimeMillis);
        if (expiredUserIds != null && !expiredUserIds.isEmpty()) {
            // 2. 从主GEO集合中删除这些用户
            redisTemplate.opsForZSet().remove(RedisEnum.USER_LOCATION_KEY.getKey(), expiredUserIds.toArray());

            // 3. 从时间戳集合中也删除这些用户
            redisTemplate.opsForZSet().remove(RedisEnum.USER_LOCATION_TS_KEY.getKey(), expiredUserIds.toArray());

            log.info("清理了 {} 个过期的用户位置信息", expiredUserIds.size());
        }
    }
}
